﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Face8280WebSocketServer.DB.Device
{
    [Table("FaceDevice")]
    public class FaceDeviceDetail
    {
        /// <summary>
        /// 主键
        /// </summary>
        [Key]
        [Required]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        /// <summary>
        /// 设备 SN
        /// </summary>
        public string DeviceID { get; set; }  // 是

        /// <summary>
        /// 设备名称
        /// </summary>
        public string DeviceName { get; set; }  // 是

        //public string DeviceIP { get; set; }

        //public int DevicePort { get; set; }
        //public int ConnectType { get; set; }

        #region 语音
        /// <summary>
        /// 音量大小(范围 0-10)  
        /// </summary>
        public int ParameterVolume { get; set; }  // 是


        /// <summary>
        /// 语音模式 0,不播报；1，播放名字; 2,播放问候语;3,播放名字和问候语
        /// </summary>
        public int ParameterVoiceMode { get; set; }  // 是

        /// <summary>
        /// 问候语 0，请通行;1,欢迎光临;2，时间问候语
        /// </summary>
        public int ParameterGrettings { get; set; }  // 是

        /// <summary>
        /// 陌生人语音 0，不播报;1,播报假体;2，播报陌生人；3，播报假体和陌生人
        /// </summary>
        public int ParameterStrangerVoice { get; set; }  // 是
        #endregion


        #region 补光灯
        /// <summary>
        /// 补光灯模式：0：常闭；  1：常开； 2：自动；
        /// </summary>
        public int ParameterLightSwitch { get; set; }  // 是
        #endregion


        #region UI界面
        /// <summary>
        /// 亮度设置 1-10
        /// </summary>
        public int ParameterBrightness { get; set; }  // 是

        /// <summary>
        /// 曝光设置     -3-3  （2021年8月3日 新增）
        /// </summary>
        public int ParameterExposure { get; set; }  // 是

        /// <summary>
        /// 红外图像开关 0--关闭；1--开启  （2021年8月3日 新增）
        /// </summary>
        public int ParameterIR { get; set; }  // 是

        /// <summary>
        /// 主界面设置--公司名称
        /// </summary>
        public string ParameterCompanyName { get; set; }  // 是


        /// <summary>
        /// 语言选择 0，中文；1，英文；2，繁体
        /// </summary>
        public int ParameterLanguageChoose { get; set; }  // 是

        /// <summary>
        /// 菜单密码
        /// </summary>
        public string ParameterLoginPassword { get; set; }  // 是

        #endregion



        #region 身份信息
        /// <summary>
        /// 固件版本信息
        /// </summary>
        public string ParameterFirmwareMsg { get; set; }  // 是

        /// <summary>
        /// 序列号
        /// </summary>
        public string ParameterSerialNum { get; set; }  // 是

        /// <summary>
        /// 制造商
        /// </summary>
        public string ParameterManufacturer { get; set; }  // 是

        /// <summary>
        /// 网址
        /// </summary>
        public string ParameterWebsite { get; set; }  // 是

        /// <summary>
        /// 生产日期
        /// </summary>
        public string ParameterProductionDate { get; set; }  // 是
        #endregion



        #region 记录存储
        /// <summary>
        /// 是否存储非雇员识别记录，0:不存储，1:存储
        /// </summary>
        public int ParameterSaveExternalvisitors { get; set; }  // 是

        /// <summary>
        /// 保存现场图片 0，不保存；1，保存
        /// </summary>
        public int ParameterSavePicture { get; set; }  // 是
        #endregion

        #region 人脸识别

        /// <summary>
        /// 活体检测,1 打开，0 关闭
        /// </summary>
        public int ParameterPreview { get; set; }  // 是
        /// <summary>
        /// 活体检测阈值 1-10  （2021年8月3日 新增）
        /// </summary>
        public int ParameterFaceIRThreshold { get; set; }  // 是
        /// <summary>
        /// 识别距离 1--远（默认值）、2--中、3--近  
        /// </summary>
        public int ParameterDistance { get; set; }  // 是

        /// <summary>
        /// 人脸识别阈值   1-99
        /// </summary>
        public int ParameterFaceThreshold { get; set; }  // 是

        /// <summary>
        /// 1：打开口罩检测，其他：关闭
        /// </summary>
        public int ParameterMask { get; set; }  // 是
        /// <summary>
        /// 口罩阈值 1-99
        /// </summary>
        public int ParameterMaskThreshold { get; set; }  // 是
        #endregion



        #region 体温检测

        /// <summary>
        /// 测温模式开关。0：非测温模式 1：测温模式
        /// </summary>
        public int ParameterTempSwitch { get; set; }  // 是

        /// <summary>
        /// 开启华氏温度,1:开，0:关
        /// </summary>
        public int ParameterFahrenheitSwitch { get; set; }  // 是

        /// <summary>
        /// 温度补偿值 -1 -- 1 
        /// </summary>
        public float ParameterCompensate { get; set; }  // 是 

        /// <summary>
        /// 温度比对阈值（最大值）
        /// </summary>
        public float ParameterTempThresholdMax { get; set; }  // 是
        #endregion




        #region 网络参数
        /// <summary>
        /// 服务器地址
        /// </summary>
        public string ParameterCloudserverAddress { get; set; }  // 是
        /// <summary>
        /// 主动触发云端轮训时间（以秒为单位）  5-7200s
        /// </summary>
        public int ParameterPolling { get; set; }  // 是

        #region 有线网络
        /// <summary>
        /// 有线网络开关，1:打开，0:关闭
        /// </summary>
        public int ParameterNetworkSwitch { get; set; }  // 是

        /// <summary>
        /// 有线网络自动 ip，1:开，0:关
        /// </summary>
        public int ParameterNetworkIpActive { get; set; }  // 是

        /// <summary>
        /// 有线网络 Ip 地址(“//192.168.0.110”)
        /// </summary>
        public string ParameterNetworkIpUrl { get; set; }  // 是

        /// <summary>
        /// 有线网络子网掩码(“//255.255.255.0”)
        /// </summary>
        public string ParameterNetworkSubnetMask { get; set; }  // 是

        /// <summary>
        /// 有线网络网关(“//192.168.0.1”)
        /// </summary>
        public string ParameterNetworkGteway { get; set; }  // 是


        /// <summary>
        /// Dns(“//192.168.0.1”)
        /// </summary>
        public string ParameterNetworkDns { get; set; }  // 是
        #endregion


        #region 无线网络
        /// <summary>
        /// 无线网开关，1:开，0:关
        /// </summary>
        public int ParameterWifiSwitch { get; set; }  // 是


        /// <summary>
        /// 无线网账号
        /// </summary>
        public string ParameterWifiName { get; set; }  // 是

        /// <summary>
        /// 无线网密码
        /// </summary>
        public string ParameterWifiPassWord { get; set; }  // 是
        #endregion

        #endregion


        #region 门禁参数
        /// <summary>
        /// 出入类型 0,入门；1，出门
        /// </summary>
        public int ParameterAccessType { get; set; }  // 是

        /// <summary>
        /// WG输出格式 26 / 34
        /// </summary>
        public int ParameterWgFormat { get; set; }  // 是

        /// <summary>
        /// 开门保持时间 1-65535（s）
        /// </summary>
        public int ParameterKeepOpenDoor { get; set; }  // 是

        /// <summary>
        /// 免验证开门 1--启用；0--禁用
        /// </summary>
        public int ParameterLaissezSwitch { get; set; }  // 是

        /// <summary>
        /// 识别间隔 0--禁用 ; 1-65535（s）
        /// </summary>
        public int ParameterRecgInterval { get; set; }  // 是

        /// <summary>
        /// 间隔记录存储设置 0,关闭；1，打开
        /// </summary>
        public int ParameterIntervalRecoSwitch { get; set; }  // 是

        /// <summary>
        /// 开门超时报警开关，0，关闭；1，开启
        /// </summary>
        public int ParameterDoorLongOpenAlarmSwitch { get; set; }  // 是

        /// <summary>
        /// 开门超时时间，门打开超过这个时间就报警	5-255（s）
        /// </summary>
        public int ParameterDoorSensorDelay { get; set; }  // 是

        /// <summary>
        /// 门磁报警开关，0，关闭；1，开启
        /// </summary>
        public int ParameterDoorAlarmSwitch { get; set; }  // 是
        #endregion


        #region 在线状态
        [NotMapped]
        /// <summary>
        /// 最近保活包时间
        /// </summary>
        public DateTime LastKeepaliveTime { get; set; }  // 是

        [NotMapped]
        /// <summary>
        /// 最近一次请求API时间
        /// </summary>
        public DateTime OnlineTime { get; set; }  // 是

        [NotMapped]
        /// <summary>
        /// 门状态  0--无门磁；1--门开；2--门关
        /// </summary>
        public int DoorStatus { get; set; }

        [NotMapped]
        /// <summary>
        /// 设备报警状态  0--无报警；1--消防报警；2--门磁报警；3--开门超时报警；4--黑名单报警
        /// </summary>
        public int AlarmStatus { get; set; }
        #endregion

        #region 更新时间
        /// <summary>
        /// 最后更新时间
        /// </summary>
        public DateTime LastUpdatetime { get; set; }  // 是
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }  // 是

        /// <summary>
        /// 同步状态
        /// 0--未同步；1--已同步
        /// </summary>
        public int UploadStatus { get; set; }

        /// <summary>
        /// 同步时间
        /// </summary>
        public DateTime UploadStatusTime { get; set; }
        #endregion

        public FaceDeviceDetail()
        {
            CreateTime = DateTime.Now;
            LastUpdatetime = DateTime.Now;
            OnlineTime = DateTime.Now;
            LastKeepaliveTime = DateTime.Now;
            UploadStatusTime = DateTime.Now;
        }

        public FaceDeviceDetail CopyToNetWork(FaceDeviceDetail target)
        {
            target.ParameterNetworkSwitch = ParameterNetworkSwitch;//有线网络开关，1:打开，0:关闭
            target.ParameterNetworkIpActive = ParameterNetworkIpActive;//有线网络自动ip，1:开，0:关
            target.ParameterNetworkIpUrl = ParameterNetworkIpUrl;//有线网络Ip地址(“//192.168.0.110”)
            target.ParameterNetworkSubnetMask = ParameterNetworkSubnetMask;//有线网络子网掩码(“//255.255.255.0”)
            target.ParameterNetworkGteway = ParameterNetworkGteway;//有线网络网关(“//192.168.0.1”)
            target.ParameterNetworkDns = ParameterNetworkDns;//Dns(“//192.168.0.1”)
            target.ParameterWifiSwitch = ParameterWifiSwitch;//无线网开关，1:开，0:关
            target.ParameterWifiName = ParameterWifiName;//无线网账号
            target.ParameterWifiPassWord = ParameterWifiPassWord;//无线网密码
            return target;
        }
        public FaceDeviceDetail CopyToWorkPar(FaceDeviceDetail target)
        {
            #region 语音
            target.ParameterVolume = ParameterVolume;//音量大小(范围0-10)
            target.ParameterVoiceMode = ParameterVoiceMode;//语音模式0,不播报；1，播放名字;2,播放问候语;3,播放名字和问候语
            target.ParameterGrettings = ParameterGrettings;//问候语0，请通行;1,欢迎光临;2，时间问候语
            target.ParameterStrangerVoice = ParameterStrangerVoice;//陌生人语音0，不播报;1,播报假体;2，播报陌生人；3，播报假体和陌生人
            #endregion

            #region 补光灯
            target.ParameterLightSwitch = ParameterLightSwitch;//补光灯开关：0:关闭，1：打开(补光灯打开才能设置自动补光)
            #endregion

            #region UI界面
            target.ParameterBrightness = ParameterBrightness;//亮度设置1-10
            target.ParameterExposure = ParameterExposure;//曝光设置
            target.ParameterIR = ParameterIR;//红外图像开关
            target.ParameterCompanyName = ParameterCompanyName;//主界面设置--公司名称
            target.ParameterLanguageChoose = ParameterLanguageChoose;//语言选择0，中文；1，英文；2，繁体
            target.ParameterLoginPassword = ParameterLoginPassword;//菜单密码
            #endregion

            #region 身份信息
            //target.ParameterFirmwareMsg = src.ParameterFirmwareMsg;//固件版本信息
            target.ParameterSerialNum = ParameterSerialNum;//序列号
            target.ParameterManufacturer = ParameterManufacturer;//制造商
            target.ParameterWebsite = ParameterWebsite;//网址
            target.ParameterProductionDate = ParameterProductionDate;//生产日期
            #endregion

            #region 记录存储
            target.ParameterSaveExternalvisitors = ParameterSaveExternalvisitors;//是否存储非雇员识别记录，0:不存储，1:存储
            target.ParameterSavePicture = ParameterSavePicture;//保存现场图片 0，不保存；1，保存
            #endregion

            #region 人脸识别
            target.ParameterPreview = ParameterPreview;//活体检测,1打开，0关闭
            target.ParameterFaceIRThreshold = ParameterFaceIRThreshold;//活体检测阈值1-10
            target.ParameterDistance = ParameterDistance;//识别距离 1--远（默认值）、2--中、3--近  
            target.ParameterFaceThreshold = ParameterFaceThreshold;//人脸识别阈值
            target.ParameterMask = ParameterMask;//1：打开口罩检测，其他：关闭
            target.ParameterMaskThreshold = ParameterMaskThreshold;//口罩阈值
            #endregion

            #region 体温检测
            target.ParameterTempSwitch = ParameterTempSwitch;//测温模式开关，0关闭，1打开
            target.ParameterFahrenheitSwitch = ParameterFahrenheitSwitch;//开启华氏温度,1:开，0:关
            target.ParameterCompensate = ParameterCompensate;//-1 -- 1温度补偿值
            target.ParameterTempThresholdMax = ParameterTempThresholdMax;//温度比对阈值（最大值）
            #endregion

            #region 网络参数
            target.ParameterCloudserverAddress = ParameterCloudserverAddress;//服务器地址
            target.ParameterPolling = ParameterPolling;//主动触发云端轮训时间（以秒为单位）
            #endregion


            #region 门禁参数
            target.ParameterAccessType = ParameterAccessType;//出入类型0,入门；1，出门

            target.ParameterWgFormat = ParameterWgFormat;//WG输出格式26/34
            target.ParameterKeepOpenDoor = ParameterKeepOpenDoor;//开门保持时间1-65535（s）
            target.ParameterLaissezSwitch = ParameterLaissezSwitch;//免验证开门1--启用；0--禁用
            target.ParameterRecgInterval = ParameterRecgInterval;//识别间隔0--禁用;1-65535（s）
            target.ParameterIntervalRecoSwitch = ParameterIntervalRecoSwitch;//间隔记录存储设置0,关闭；1，打开
            target.ParameterDoorLongOpenAlarmSwitch = ParameterDoorLongOpenAlarmSwitch;//开门超时报警开关，0，关闭；1，开启
            target.ParameterDoorSensorDelay = ParameterDoorSensorDelay;//开门超时时间，门打开超过这个时间就报警	5-255（s）
            target.ParameterDoorAlarmSwitch = ParameterDoorAlarmSwitch;//门磁报警，0，关闭；1，开启
            #endregion
            return target;
        }
        public FaceDeviceDetail CopyTo(FaceDeviceDetail target)
        {
            CopyToWorkPar(target);

            target.DeviceID = DeviceID;//设备ID
            target.DeviceName = DeviceName;//姓名
            return target;
        }
    }
}
